package comprasdiretas.beans;

import java.sql.Date;
import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

import comprasdiretas.ejb.FornecedorControllerLocal;
import comprasdiretas.entity.AreaAtuacaoEntity;
import comprasdiretas.entity.FornecedorEntity;
import comprasdiretas.exception.ObjetoJaCadastradoException;
import comprasdiretas.exception.ParametroNullException;
import comprasdiretas.util.FornecedorDetalhes;

public class FornecedorBean {
	private String cnpjcpf;
	private String nome;
	private String endereco;
	private String bairro;
	private String cidade;
	private String estado;
	private String cep;
	private String telefone;
	private String celular;
	private String fax;
	private String nit;
	private String pis;
	private Date data;
	private char tipo;
	private int areaAtuacao;
	
	@EJB
	private FornecedorControllerLocal fornecedorController;

	public FornecedorBean(){
	}
	
	

	public String getCnpjcpf() {
		return cnpjcpf;
	}



	public void setCnpjcpf(String cnpjcpf) {
		this.cnpjcpf = cnpjcpf;
	}



	public String getNome() {
		return nome;
	}



	public void setNome(String nome) {
		this.nome = nome;
	}



	public String getEndereco() {
		return endereco;
	}



	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}



	public String getBairro() {
		return bairro;
	}



	public void setBairro(String bairro) {
		this.bairro = bairro;
	}



	public String getCidade() {
		return cidade;
	}



	public void setCidade(String cidade) {
		this.cidade = cidade;
	}



	public String getEstado() {
		return estado;
	}



	public void setEstado(String estado) {
		this.estado = estado;
	}



	public String getCep() {
		return cep;
	}



	public void setCep(String cep) {
		this.cep = cep;
	}



	public String getTelefone() {
		return telefone;
	}



	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}



	public String getCelular() {
		return celular;
	}



	public void setCelular(String celular) {
		this.celular = celular;
	}



	public Date getData() {
		return data;
	}



	public void setData(Date data) {
		this.data = data;
	}



	public char getTipo() {
		return tipo;
	}

	public void setTipo(char tipo) {
		this.tipo = tipo;
	}
	
	
	
	public int getAreaAtuacao() {
		return areaAtuacao;
	}

	public void setAreaAtuacao(int areaAtuacao) {
		this.areaAtuacao = areaAtuacao;
	}
	
	public List<FornecedorEntity> getResultadoConsultaFornecedor(){
		NomeConsultaFornecedorBean nomeFornecedorBean = (NomeConsultaFornecedorBean)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("nomeConsultaFornecedorBean");
		String nomeFornecedor;
		String cnpjcpfFornecedor=null;
		List<FornecedorEntity> fornecedoresEntity;
		if (nomeFornecedorBean!=null) {
			nomeFornecedor = nomeFornecedorBean.getNomeConsulta();
			cnpjcpfFornecedor = nomeFornecedorBean.getCnpjcpf();
		}else {
			nomeFornecedor = "";
		}
		
		if (cnpjcpfFornecedor==null||cnpjcpfFornecedor.isEmpty()||cnpjcpfFornecedor.equals("")) {
			fornecedoresEntity = fornecedorController.consultarFornecedoresPeloNome(nomeFornecedor);
		} else {
			fornecedoresEntity = fornecedorController.consultarFornecedoresPeloCnpjcpf(cnpjcpfFornecedor);
		}

		return fornecedoresEntity;
	}
	
	public String listarTodosFornecedores(){
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("nomeConsultaFornecedorBean", new NomeConsultaFornecedorBean(""));
		
		return "resultadoConsultaFornecedores";
	}
	
	public String consultaFornecedores(){
		return "resultadoConsultaFornecedores";
	}

	public String cadastraFornecedor(){
		try {
			if (this.cnpjcpf.length()==11) {
				this.tipo='f';
			} else {
				this.tipo='j';
			}
            FornecedorDetalhes fornecedorDetalhes = new FornecedorDetalhes(this.cnpjcpf,this.nome,this.endereco,this.bairro,this.cidade,this.estado,this.cep,this.telefone,this.celular,this.fax,this.nit,this.pis,new Date(System.currentTimeMillis()),this.tipo,this.areaAtuacao);
			fornecedorController.cadastrarFornecedor(fornecedorDetalhes);
		}catch (ParametroNullException e) {
			e.printStackTrace();
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,e.getMessage(),e.getMessage()));
			limparCampos();
			return "erro";
		}catch (ObjetoJaCadastradoException e) {
			e.printStackTrace();
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,e.getMessage(),e.getMessage()));
			limparCampos();
			return "erro";
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,e.getMessage(),e.getMessage()));
			limparCampos();
			return "erro";
		}
		limparCampos();
		FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Cadastro Realizado com Sucesso","Cadastro Realizado com Sucesso"));
		return "ok";
	}
	
	public String preparaAlteraFornecedor(){
		try {
			FornecedorEntity fornecedorSelecionado = (FornecedorEntity) FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get("fornecedorSelecionado");
			if (fornecedorSelecionado==null) {
				throw new Exception("Nenhum Fornecedor foi selecionada para altera��o.");
			}
			
			//Popular os dados da inexigibilidadeSelecionada
			cnpjcpf=fornecedorSelecionado.getCnpjcpf();
			nome=fornecedorSelecionado.getNome();
			endereco=fornecedorSelecionado.getEndereco();
			bairro=fornecedorSelecionado.getBairro();
			cidade=fornecedorSelecionado.getCidade();
			estado=fornecedorSelecionado.getEstado();
			cep=fornecedorSelecionado.getCep();
			telefone=fornecedorSelecionado.getTelefone();
			celular=fornecedorSelecionado.getCelular();
			fax=fornecedorSelecionado.getFax();
			nit = fornecedorSelecionado.getNit();
			pis = fornecedorSelecionado.getPis();
			data=fornecedorSelecionado.getDataCadastro();
			tipo=fornecedorSelecionado.getTipo();
			AreaAtuacaoEntity area = fornecedorSelecionado.getAreaAtuacao();
			if (area==null) {
				throw new Exception("Nenhuma area de Atua��o relacionada ao Fornecedor.");
			}
			areaAtuacao=area.getId();		
			
			
		} catch (Exception e) {
			e.printStackTrace();
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,e.getMessage(),e.getMessage()));
			
			return "erro";
		}
		return "alterarFornecedor";
	}
	
	public String alteraFornecedor(){
		try {
			
			fornecedorController.atualizaFornecedorEntity(new FornecedorDetalhes(this.cnpjcpf,this.nome,this.endereco,this.bairro,
					this.cidade,this.estado,this.cep,this.telefone,this.celular,this.fax,this.nit,this.pis,data,this.tipo,this.areaAtuacao));
		   	
		} catch (Exception e) {
			e.printStackTrace();
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,e.getMessage(),e.getMessage()));
			return "erro";
		}
		FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Alteracao realizada com Sucesso.","Alteracao realizada com Sucesso."));
		return "ok";
	}
	
	public String excluiFornecedor(){
		try {
			FornecedorEntity fornecedorSelecionada = (FornecedorEntity) FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get("fornecedorSelecionado");
			if (fornecedorSelecionada==null) {
				throw new Exception("Nenhum Fornecedor foi selecionada para exclusao.");
			}
			fornecedorController.excluiFornecedorEntity(fornecedorSelecionada.getCnpjcpf());
		} catch (Exception e) {
			e.printStackTrace();
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,e.getMessage(),e.getMessage()));
			return "erro";
		}
		FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Fornecedor removido com sucesso.","Fornecedor removido com sucesso."));
		return "resultadoConsultaFornecedor";
	}
	
	public List<SelectItem> getEstadosSigla(){
		List<SelectItem> estadosSiglaSelectItem = new ArrayList<SelectItem>();
		estadosSiglaSelectItem.add(new SelectItem("AC","Acre"));
		estadosSiglaSelectItem.add(new SelectItem("AL","Alagoas"));
		estadosSiglaSelectItem.add(new SelectItem("AP","Amapa"));
		estadosSiglaSelectItem.add(new SelectItem("AM","Amazonas"));
		estadosSiglaSelectItem.add(new SelectItem("BA","Bahia"));
		estadosSiglaSelectItem.add(new SelectItem("CE","Ceara"));
		estadosSiglaSelectItem.add(new SelectItem("DF","Distrito Federal"));
		estadosSiglaSelectItem.add(new SelectItem("ES","Espirito Santo"));
		estadosSiglaSelectItem.add(new SelectItem("GO","Goias"));
		estadosSiglaSelectItem.add(new SelectItem("MA","Maranhao"));
		estadosSiglaSelectItem.add(new SelectItem("MT","Mato Grosso"));
		estadosSiglaSelectItem.add(new SelectItem("MS","Mato Grosso do Sul"));
		estadosSiglaSelectItem.add(new SelectItem("MG","Minas Gerais"));
		estadosSiglaSelectItem.add(new SelectItem("PR","Parana"));
		estadosSiglaSelectItem.add(new SelectItem("PB","Paraiba"));
		estadosSiglaSelectItem.add(new SelectItem("PA","Para"));
		estadosSiglaSelectItem.add(new SelectItem("PE","Pernambuco"));
		estadosSiglaSelectItem.add(new SelectItem("PI","Piaui"));
		estadosSiglaSelectItem.add(new SelectItem("RJ","Rio de Janeiro"));
		estadosSiglaSelectItem.add(new SelectItem("RN","Rio Grande do Norte"));
		estadosSiglaSelectItem.add(new SelectItem("RS","Rio Grande do Sul"));
		estadosSiglaSelectItem.add(new SelectItem("RO","Rondonia"));
		estadosSiglaSelectItem.add(new SelectItem("RR","Roraima"));
		estadosSiglaSelectItem.add(new SelectItem("SC","Santa Catarina"));
		estadosSiglaSelectItem.add(new SelectItem("SE","Sergipe"));
		estadosSiglaSelectItem.add(new SelectItem("SP","Sao Paulo"));
		estadosSiglaSelectItem.add(new SelectItem("TO","Tocantins"));
		return estadosSiglaSelectItem;
	}
	
	public List<SelectItem> getTodosFornecedores(){
		List<SelectItem> fornecedoresSelectItem = new ArrayList<SelectItem>();
		List<FornecedorEntity> fornecedoresEntity = fornecedorController.listarFornecedores();
		for (FornecedorEntity fornecedorEntity : fornecedoresEntity) {
			fornecedoresSelectItem.add(new SelectItem(fornecedorEntity.getId(),"CNPJ/CPF: "+fornecedorEntity.getCnpjcpf()+" - "+fornecedorEntity.getNome()));
		}
		return fornecedoresSelectItem;
	}
	
	private void limparCampos(){
		cnpjcpf=null;
		nome=null;
		endereco=null;
		bairro=null;
		cidade=null;
		estado=null;
		cep=null;
		telefone=null;
		celular=null;
		data=null;
		tipo=0;
		areaAtuacao=0;
	}
	
	public String preparaCadastraFornecedor(){
		cnpjcpf=null;
		nome=null;
		endereco=null;
		bairro=null;
		cidade=null;
		estado=null;
		cep=null;
		telefone=null;
		celular=null;
		data=null;
		tipo=0;
		areaAtuacao=0;
		
		return "CadastrarFornecedor";
	}

	public void setFax(String fax) {
		this.fax = fax;
	}



	public String getFax() {
		return fax;
	}



	public void setNit(String nit) {
		this.nit = nit;
	}



	public String getNit() {
		return nit;
	}



	public void setPis(String pis) {
		this.pis = pis;
	}



	public String getPis() {
		return pis;
	}
}
